home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / filesyst / ext2 / ext2ed-0.000 / ext2ed-0 / ext2ed-0.1 / win.c < prev   
C/C++ Source or Header  |  1995-08-24  |  4KB  |  169 lines

  1. /*
  2.  
  3. /usr/src/ext2ed/win.c
  4.  
  5. A part of the extended file system 2 disk editor.
  6.  
  7. --------------------------------------------------------
  8. Window management - Interfacing with the ncurses library
  9. --------------------------------------------------------
  10.  
  11. First written on: April 17 1995
  12.  
  13. Copyright (C) 1995 Gadi Oxman
  14.  
  15. */
  16.  
  17. #include <stdio.h>
  18. #include <stdlib.h>
  19. #include <string.h>
  20.  
  21. #include "ext2ed.h"
  22.  
  23. struct struct_pad_info show_pad_info;
  24. WINDOW *title_win,*show_win,*command_win,*show_pad;
  25.  
  26. void init_windows (void)
  27.  
  28. {
  29.     char title_string [80];
  30.     
  31.     initscr ();
  32.     
  33.     if (LINES<TITLE_WIN_LINES+SHOW_WIN_LINES+COMMAND_WIN_LINES+3) {
  34.         printf ("Sorry, your terminal screen is too small\n");
  35.         printf ("Error - Can not initialize windows\n");
  36.         exit (1);
  37.     }
  38.  
  39.     title_win=newwin (TITLE_WIN_LINES,COLS,0,0);
  40.     show_win=newwin (SHOW_WIN_LINES,COLS,TITLE_WIN_LINES,0);
  41.     show_pad=newpad (SHOW_PAD_LINES,SHOW_PAD_COLS);
  42.     command_win=newwin (COMMAND_WIN_LINES,COLS,LINES-COMMAND_WIN_LINES,0);
  43.  
  44.     if (title_win==NULL || show_win==NULL || show_pad==NULL || command_win==NULL) {
  45.         printf ("Error - Not enough memory - Can not initialize windows\n");exit (1);
  46.     }
  47.  
  48.     box (title_win,0,0);
  49.     sprintf (title_string,"EXT2ED - Extended-2 File System editor ver %d.%d (%s)",version_major,version_minor,revision_date);
  50.     wmove (title_win,TITLE_WIN_LINES/2,(COLS-strlen (title_string))/2);
  51.     wprintw (title_win,title_string);
  52.  
  53. #ifdef    OLD_NCURSES
  54.     wattrset (show_win,A_NORMAL);werase (show_win);
  55. #else
  56.     wbkgdset (show_win,A_REVERSE);werase (show_win);
  57. #endif
  58.     show_pad_info.line=0;show_pad_info.col=0;
  59.     show_pad_info.display_lines=LINES-TITLE_WIN_LINES-SHOW_WIN_LINES-COMMAND_WIN_LINES-2;
  60.     show_pad_info.display_cols=COLS;
  61.     show_pad_info.max_line=show_pad_info.display_lines-1;show_pad_info.max_col=show_pad_info.display_cols-1;
  62.     show_pad_info.disable_output=0;
  63.     
  64.     scrollok (command_win,TRUE);
  65.  
  66.     refresh_title_win ();refresh_show_win ();refresh_show_pad ();refresh_command_win ();
  67. }
  68.  
  69. void refresh_title_win (void)
  70.  
  71. {
  72.     wrefresh (title_win);
  73. }
  74.  
  75. void refresh_show_win (void)
  76.  
  77. {
  78.     int current_page,total_pages;
  79.     
  80.     current_page=show_pad_info.line/show_pad_info.display_lines+1;
  81.     if (show_pad_info.line%show_pad_info.display_lines)
  82.         current_page++;
  83.     total_pages=show_pad_info.max_line/show_pad_info.display_lines+1;
  84.  
  85.     wmove (show_win,2,COLS-18);
  86.     wprintw (show_win,"Page %d of %d\n",current_page,total_pages);
  87.  
  88.     wmove (show_win,2,COLS-18);
  89.     wrefresh (show_win);
  90. }
  91.  
  92.  
  93. void refresh_show_pad (void)
  94.  
  95. {
  96.     int left,top,right,bottom,i;
  97.     
  98.     if (show_pad_info.disable_output)
  99.         return;
  100.         
  101.     if (show_pad_info.max_line < show_pad_info.display_lines-1) {
  102.         for (i=show_pad_info.max_line+1;i<show_pad_info.display_lines;i++) {
  103.             wmove (show_pad,i,0);wprintw (show_pad,"\n");
  104.         }
  105.     }
  106.     left=0;right=show_pad_info.display_cols-1;
  107.     top=TITLE_WIN_LINES+SHOW_WIN_LINES+1;bottom=top+show_pad_info.display_lines-1;
  108.  
  109.     if (show_pad_info.line > show_pad_info.max_line-show_pad_info.display_lines+1)
  110.         show_pad_info.line=show_pad_info.max_line-show_pad_info.display_lines+1;
  111.  
  112.     if (show_pad_info.line < 0)
  113.         show_pad_info.line=0;
  114.  
  115. #ifdef OLD_NCURSES
  116.     prefresh (show_pad,show_pad_info.line,show_pad_info.col,top,left,show_pad_info.display_lines-1,show_pad_info.display_cols-1);
  117. #else
  118.     prefresh (show_pad,show_pad_info.line,show_pad_info.col,top,left,top+show_pad_info.display_lines-1,left+show_pad_info.display_cols-1);
  119. #endif
  120. }
  121.  
  122. void refresh_command_win (void)
  123.  
  124. {
  125.     wrefresh (command_win);
  126. }
  127.  
  128. void close_windows (void)
  129.  
  130. {
  131.     echo ();
  132.     
  133.     delwin (title_win);
  134.     delwin (command_win);
  135.     delwin (show_win);
  136.     delwin (show_pad);
  137.     
  138.     endwin ();
  139. }
  140.  
  141. void show_info (void)
  142.  
  143. {
  144.     int block_num,block_offset;
  145.     
  146.     block_num=device_offset/file_system_info.block_size;
  147.     block_offset=device_offset%file_system_info.block_size;
  148.  
  149.     wmove (show_win,0,0);
  150.     wprintw (show_win,"Offset %-3ld in block %ld. ",block_offset,block_num);
  151.     if (current_type != NULL)
  152.         wprintw (show_win,"Type: %s\n",current_type->name);
  153.     else
  154.         wprintw (show_win,"Type: %s\n","none");
  155.  
  156.     refresh_show_win ();
  157. }
  158.  
  159.  
  160. void redraw_all (void)
  161.  
  162. {
  163.     close_windows ();
  164.     init_windows ();
  165.     
  166.     wmove (command_win,0,0);
  167.     mvcur (-1,-1,LINES-COMMAND_WIN_LINES,0);
  168.     
  169. }